#ifndef __ALLFUNCTION_H__
#define __ALLFUNCTION_H__

#include <stdbool.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <sys/mman.h>
#include <string.h>
#include <strings.h>
#include <sys/mman.h>
#include <dirent.h>
#include <stdlib.h>
#include <errno.h>
#include <time.h>
#include <sys/ioctl.h>
#include <dirent.h>

#include "../头文件/SelectObject.h"
#include "../头文件/UserFunction.h"
#include "../头文件/Allenum.h"
#include "../头文件/font.h"
#include "../头文件/lcd.h"
#include "../头文件/AllStruct.h"
#include "../头文件/ChargeFunction.h"

#define COLORFILE "/dev/fb0" // 开发板像素文件路径

#define KEYBOARD_IMAGE "../Image/KeyBoard.jpg"   // 键盘的图片路径
#define DEVICE_DATA "../Data/Device.txt"         // 设备信息的文件路径
#define STARTUPIMAGE "../Image/StartupImage.jpg" // 开机图片的路径

// 判断键盘是否打开
bool keyBoardShow;

// 判断当前是什么界面(注册/登录)
extern ClickObject registerOrLogin;

// 当前输入的账号
char InputAccount[30];

// 当前输入的密码
char InputPassword[30];

// 小眼睛的状态
extern bool smallEyeState;

// 当前登录的用户
UserData CurrentUser;

// 当前接入的设备
Device CurrentDevice;

bool click_event(int startX, int startY, int endX, int endY, bool BlockState);

void show_progress_bar(int progress);

int get_click_type();

void show_keyboard();

void show_account_password_canvas();

Flag all_click_event(bool BlockState);

void close_keyboard();

void clear_data(Flag flag);

void delete_data(Flag flag);

void confirm_data(ClickObject clickobject);

int find_user(const char *account, UserData *users, int user_count);

void generate_cardid(char *cardid);

void initialize_card_validity(const TextType register_time, TextType validity);

int my_strptime(const TextType input, const TextType format, struct tm *tm);

void free_user_data(UserData *user);

void init_user_data(UserData *user);

void show_text(u32 width, u32 height, u32 byteperpixel, u32 mapcolor, int fontsize, s32 x, s32 y, char *text, u32 fontcolor, s32 maxWidth, int print_index);

void Init_Device(bool devicestate, TextType position);

#endif